The creation and maintenance of a matrix of test environments is a very important aspect of the software development process. Software products are often supported on an array of platforms, with differing versions of libraries, operating systems or various other components. As the number of variables and options increases, enumerating all potential combinations of possible end-user environments becomes exponentially impractical. As a result, organizations must choose to limit the scope of their testing to cover as many combinations of end user environments as possible. However, the unknown or untested combinations of end user environments may encounter defects or vulnerabilities.